home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
076-100
/
scopedisk81
/
asmtool1
/
macros.asm
< prev
next >
Wrap
Assembly Source File
|
1995-03-19
|
9KB
|
301 lines
XREF _LVOOpenLibrary
XREF _LVOOpen
XREF _LVOClose
XREF _LVORename
XREF _LVODeleteFile
XREF _LVOInput
XREF _LVOOutput
XREF _LVORead
XREF _LVOWrite
XREF _LVOSeek
XREF _LVOCloseLibrary
XREF _AbsExecBase
IFND LF
LF EQU 10
ENDC
;NA = Number of Arguments
;SB = the location of a string buffer
Start MACRO ;(no args)
MOVE.L A7,SystemSP
JSR OpenDOSLibrary
ENDM
Open MACRO
MOVEM.L A0-A1,-(A7)
MOVE.L \1,A0 ;\1 => SB containing the filename
MOVE.L #\2,A1
JSR OpenFile
MOVEM.L (A7)+,A0-A1
ENDM
Create MACRO
MOVEM.L A0-A1,-(A7)
MOVE.L \1,A0 ;\1 => SB containing the filename
MOVE.L #\2,A1 ;\2 => the file handle
JSR CreateFile
MOVEM.L (A7)+,A0-A1
ENDM
Read MACRO
MOVEM.L A0-A1,-(A7)
MOVE.L \1,A0 ;\1 => the file handle
MOVE.L \2,A1 ;\2 => SB to receive the disk record
JSR ReadFile
MOVEM.L (A7)+,A0-A1
ENDM
Write MACRO
MOVEM.L A0-A1,-(A7)
MOVE.L \1,A0 ;\1 => the file handle
MOVE.L \2,A1 ;\2 => SB containing the disk record
JSR WriteFile
MOVEM.L (A7)+,A0-A1
ENDM
Seek MACRO
MOVEM.L A0/D0-D1,-(A7)
MOVE.L \1,A0 ;\1 => the file handle
MOVE.L \2,D0 ;\2 => the position to which to seek
MOVE.L #-1,D1
JSR SeekFile
MOVEM.L (A7)+,A0/D0-D1
ENDM
Close MACRO
MOVEM.L A0,-(A7)
MOVE.L \1,A0 ;\1 => the file handle
JSR CloseFile
MOVEM.L (A7)+,A0
ENDM
Rename MACRO
MOVEM.L A0-A1,-(A7)
MOVE.L \1,A0 ;\1 => SB containing the current filename
MOVE.L \2,A1 ;\2 => SB containing the new filename
JSR RenameFile
MOVEM.L (A7)+,A0-A1
ENDM
Delete MACRO
MOVEM.L A0,-(A7)
MOVE.L \1,A0 ;\1 => SB containing the filename
JSR DeleteFile
MOVEM.L (A7)+,A0
ENDM
ReadCon MACRO ;\1 => SB containing text to send to the
; console
MOVEM.L D0/A0-A1,-(A7)
MOVE.L ConIn,A0
MOVE.L \1,A1
JSR ReadFile
MOVE.L \1,A1 ;(Lop off the terminating LineFeed)
ADDQ.L #4,A1
SUBI.L #1,(A1)
MOVEM.L (A7)+,D0/A0-A1
ENDM
WritCon MACRO ;\1 => SB containing text to send to the
; console
MOVEM.L D0/A0-A1,-(A7)
MOVE.L ConOut,A0
MOVE.L \1,A1
JSR WriteFile
MOVEM.L (A7)+,D0/A0-A1
ENDM
SetScan MACRO ;\1 => SB to scan later
MOVEM.L A0,-(A7)
MOVEA.L \1,A0
ADDQ.L #4,A0
MOVE.L (A0),ScanCounter
ADDQ.L #4,A0
MOVE.L A0,ScanPointer
MOVEM.L (A7)+,A0
ENDM
Scanc MACRO ;\1 => SB to receive the next character
MOVEM.L A0,-(A7) ; scanned
MOVEA.L \1,A0
JSR Scanc_
MOVEM.L (A7)+,A0
ENDM
Scanw MACRO ;\1 => SB to receive the next word scanned
MOVEM.L A0,-(A7)
MOVEA.L \1,A0
JSR Scanw_
MOVEM.L (A7)+,A0
ENDM
Scana MACRO ;\1 => SB to receive the next alphanumeric
MOVEM.L A0,-(A7) ; word scanned (stopping at punctuation and
MOVEA.L \1,A0 ; special characters)
JSR Scana_
MOVEM.L (A7)+,A0
ENDM
StrCpy MACRO ;\1 => SB to copy
MOVEM.L A0/A1,-(A7) ;\2 => SB to copy to
MOVEA.L \1,A0
MOVEA.L \2,A1
JSR StrCpy_
MOVEM.L (A7)+,A0/A1
ENDM
StrCat MACRO ;\1 => SB to concatenate
MOVEM.L A0/A1,-(A7) ;\2 => SB to be concatenated onto
MOVEA.L \1,A0
MOVEA.L \2,A1
JSR StrCat_
MOVEM.L (A7)+,A0/A1
ENDM
StrCmp MACRO ;\1 => SB to compare
MOVEM.L A0/A1,-(A7) ;\2 => SB to compare
MOVEA.L \1,A0 ; (Zero flag is set or cleared accordingly)
MOVEA.L \2,A1
JSR StrCmp_
MOVEM.L (A7)+,A0/A1
ENDM
StrLen MACRO ;\1 => SB to examine the length of
MOVEM.L A0/A1,-(A7)
MOVEA.L \1,A0
JSR StrLen_
MOVEM.L (A7)+,A0/A1
ENDM
Left MACRO ;\1 => SB containing the source string
MOVEM.L A0/A1/D0,-(A7)
MOVEA.L \1,A0 ;\2 = number of bytes to copy
MOVE.L \2,D0 ;\3 => SB containing the destination string
MOVEA.L \3,A1
JSR Left_
MOVEM.L (A7)+,A0/A1/D0
ENDM
Mid MACRO ;\1 => SB containing the source string
MOVEM.L A0/A1/D0/D1,-(A7)
MOVEA.L \1,A0 ;\2 = point at which to start copying
MOVE.L \2,D0 ;\3 = number of bytes to copy
MOVE.L \3,D1 ;\4 => SB containing the destination string
MOVEA.L \4,A1
JSR Mid_
MOVEM.L (A7)+,A0/A1/D0/D1
ENDM
Right MACRO ;\1 => SB containing the source string
MOVEM.L A0/A1/D0,-(A7)
MOVEA.L \1,A0 ;\2 = number of bytes to copy
MOVE.L \2,D0 ;\3 => SB containing the destination string
MOVEA.L \3,A1
JSR Right_
MOVEM.L (A7)+,A0/A1/D0
ENDM
AtoI MACRO ;\1 => SB to be converted
MOVEM.L D0/A0,-(A7) ;\2 => integer result
MOVE.L \1,A0
JSR AtoI_
MOVE.L D0,\2
MOVEM.L (A7)+,D0/A0
ENDM
ItoA MACRO ;\1 => integer to be converted
;\2 => SB result
MOVEM.L D0/A0,-(A7)
MOVE.L \1,D0
MOVE.L \2,A0
JSR ItoA_
MOVEM.L (A7)+,D0/A0
ENDM
HAtoI MACRO
MOVEM.L D0/A0,-(A7)
MOVE.L \1,A0
JSR HAtoI_
MOVE.L D0,\2
MOVEM.L (A7)+,D0/A0
ENDM
ItoHA8 MACRO
MOVEM.L D0/A0,-(A7)
MOVE.L \1,D0
MOVE.L \2,A0
JSR ItoHA8_
MOVEM.L (A7)+,D0/A0
ENDM
ItoHA4 MACRO
MOVEM.L D0/A0,-(A7)
MOVE.W \1,D0
MOVE.L \2,A0
JSR ItoHA4_
MOVEM.L (A7)+,D0/A0
ENDM
ItoHA2 MACRO
MOVEM.L D0/A0,-(A7)
MOVE.B \1,D0
MOVE.L \2,A0
JSR ItoHA2_
MOVEM.L (A7)+,D0/A0
ENDM
ItoHA1 MACRO
MOVEM.L D0/A0,-(A7)
MOVE.B \1,D0
MOVE.L \2,A0
JSR ItoHA1_
MOVEM.L (A7)+,D0/A0
ENDM
Exit MACRO ;(no args)
JSR CloseDOSLibrary
MOVEA.L SystemSP,A7
RTS
ENDM
Crlf MACRO ;(no args)
JSR DisplayCrlf
ENDM
Space MACRO ;(no args)
JSR DisplaySpace
ENDM
Display MACRO ;\1 => SB to be displayed on the console
MOVEM.L D0,-(A7)
WritCon #Displ\@
BRA Displ_3\@
Displ\@ DC.L Displ_2\@-Displ_1\@,Displ_2\@-Displ_1\@
Displ_1\@ DC.B \1
Displ_2\@
CNOP 0,2
Displ_3\@ MOVEM.L (A7)+,D0
ENDM
StrBuf MACRO ;\1 = a string buffer label
CNOP 0,2 ;\2 = the maximum length of the string buffer
\1
DC.L \2,0
DS.B \2
CNOP 0,2
ENDM
String MACRO ;\1 = a string buffer label
CNOP 0,2 ;\2 = the string
\1
String\@ DC.L String_2\@-String_1\@,String_2\@-String_1\@
String_1\@ DC.B \2
String_2\@
CNOP 0,2
ENDM